www.gusucode.com > ROCKOA PHP协同办公OA办公系统 v2.0PHP源码程序 > ROCKOA PHP协同办公OA办公系统 v2.0/rockoa_v2.0/rockoa_v2.0/webrock/extjs/ux/calendar.js
/** calendar日历 create:Chenxihu createdt:2013-11-05 11:05:00 */ Ext.define('Ext.ux.calendar', { extend: 'Ext.panel.Panel', alias: 'widget.calendarpanel', obj:false, objtd:false, marr:[31,28,31,30,31,30,31,31,30,31,30,31], weekarr:['日','一','二','三','四','五','六'], date:'', Y:'2013', m:'01', d:'01', color:'#ffffff', feastarr:{'0101':'元旦','0214':'情人节','正月初一':'春节','正月十五':'元宵节','七月初七':'七夕','五月初五':'端午节','0501':'劳动节','0601':'儿童节','1001':'国庆节','1111':'光棍节','八月十五':'中秋节','腊月三十':'除夕','腊月初八':'腊八','0801':'建军节','0701':'建党日','0401':'愚人节','0504':'青年节','0308':'妇女节','1225':'圣诞节','1224':'平安夜','1031':'万圣节','九月初九':'重阳节','0910':'教师节','0504':'青年节','0312':'植树节'}, tsarr:{'1144':'感恩节','0520':'母亲节','0630':'父亲节'},//感恩节:11月第4个星期4,父亲节:05月第2个星期日,母亲节:06月第3个星期日 rand:'', solarTerm:["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"], sTermInfo:[0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758], //===== 某年的第n个节气为几日(从0小寒起算) sTerm:function(y,n) { var offDate = new Date( ( 31556925974.7*(y-1900) + this.sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) ); return(offDate.getUTCDate()); }, changemonth:function(){}, beforechangemonth:function(){}, defaultMonth:'', rightBtn:[], leftBtn:[], initComponent: function(){ var me = this,i; me.rand = js.getrand(); me.date = me.formdt();//今天 var a = me.date.split('-'); me.Y = parseFloat(a[0]); me.m = a[1]; me.d = a[2]; if(me.defaultMonth){ a = me.defaultMonth.split('-'); me.Y = parseFloat(a[0]); me.m = a[1]; } Ext.applyIf(this,{ border:false, frame:false, id:'calendar_'+this.rand+'',textvalign:'middle', bbartext:true,bbar:false,todaycolor:'#D1E3F9' }); this.html=this.createtable(); if(this.bbartext){ if(!this.bbar)this.bbar=[]; this.bbar.push('->'); this.bbar.push({xtype:'tbtext',id:'lunardayshowmsg'+me.rand+''}); } this.tbar = [{ text:'当月',icon:gicons('date'),id:'btnshowclick'+me.rand+'',tooltip:'今天是:'+this.date+'',handler:function(){me.dangmonth();},xtype:'splitbutton',menu:[{xtype:'monthpicker',value:[this.m-1,this.Y],listeners:{okclick:function(a,v){getcmp('btnshowclick'+me.rand+'').hideMenu();var m=v[0],y=v[1];if(m!=''&&y!='')me.addcale(y,m+1);},cancelclick:function(){getcmp('btnshowclick'+me.rand+'').hideMenu()}} }] },{ text:'上个月',handler:function(){me.plftmonth(-1)},icon:gicons('resultset_previous') }]; for(i in this.leftBtn)this.tbar.push(this.leftBtn[i]); this.tbar.push('->'); this.tbar.push({ text:'2014年12月',xtype:'tbtext' ,id:'calenow_'+me.rand+'',style:'font-size:14px;font-weight:bold' }); this.tbar.push('->'); for(i in this.rightBtn)this.tbar.push(this.rightBtn[i]); this.tbar.push({ text:'下个月',handler:function(){me.plftmonth(1)},icon:gicons('resultset_next'),iconAlign:'right' }); this.on({ resize:function(o,width, height, oldWidth, oldHeigh){ me.resizebody(height); } }); this.callParent(); //农历转化初始化cursor:pointer this.lunar=Ext.create('Ext.ux.tolunar'); }, createtable:function() { var s='',i,oi=0,j; s+='<div style="border-right:1px #cccccc solid;position:static" id="extcalendarpanel'+this.rand+'"><table border="0" style="border-collapse:collapse;" cellpadding="0" height="100%" cellspacing="0" width="100%">'; s+='<thead><tr bgcolor="#f1f1f1" style="color:#333333" height="25"><th><div align="center">日</div></th><th><div align="center">一</div></th><th><div align="center">二</div></th><th><div align="center">三</div></th><th><div align="center">四</div></th><th><div align="center">五</div></th><th><div align="center">六</div></th></tr></thead>'; for(i=1;i<=6;i++){ s+='<tr class="x-grid-row-over">' for(j=1;j<=7;j++){ s+='<td oi="'+oi+'" valign="'+this.textvalign+'" onmouseover="this.className=\'x-grid-td\'" onmouseout="this.className=\'\'" style="border:1px #dddddd solid" width="14.2%" align="center"></td>'; oi++; } s+='</tr>'; } s+='</table></div>'; return s; }, afterFirstLayout:function() { var me = this; me.obj = $('#extcalendarpanel'+this.rand+''); me.objtd = me.obj.find('td'); me.addcale(me.Y,me.m); var arr = me.lunar.iconv(me.Y,me.m,me.d); if(me.bbartext)getcmp('lunardayshowmsg'+this.rand+'').setText('今天是:'+me.formdt('Y年m月d日 星期W')+' 农历:'+arr[0]+' '+arr[1]+''+arr[2]+''); me.objtd.click(function(event){ me.clickday(this,event); }); }, addhtml:function(fi, ti){ var me = this; var oha = ($('#'+this.id+'-body').height()-25)/6; var d1 = this.dayobj[fi], d2 = this.dayobj[ti]; var i1 = d1.oi,i2 = d2.oi,l,t; //var s = '<div style="position:absolute;left:'+l+'px;top:'+t+'px">'+i1+'-'+i2+'</div>'; //this.obj.append(s); }, resizebody:function(he){ var oha = ($('#'+this.id+'-body').height()-25)/6; for(var i=0;i<42;i=i+7) $(this.objtd[i]).css('height',''+oha+'px'); }, //上个月 plftmonth:function(lx) { var Y=parseFloat(this.Y),m=parseFloat(this.m); m=m+lx; if(m==0)m=12; if(m==13)m=1; if(m==12&&lx==-1)Y--; if(m==1&&lx==1)Y++; this.addcale(Y,m); }, dangmonth:function() { var a = this.date.split('-'); var Y = parseFloat(a[0]); var m = parseFloat(a[1]); if(Y==this.Y&&m==this.m)return false; this.Y=Y; this.m=m; this.addcale(Y,m); }, weekArr:['日','一','二','三','四','五','六'], formdt:function(type,sj){//获取时间 if(!type)type='Y-m-d'; var dt,ymd,his,Y,m,d,w,H,i,s,W if(/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}/.test(sj)&&sj){ sj=sj.split(' '); ymd=sj[0]; his=sj[1];if(!his)his='00:00:00'; ymd=ymd.split('-'); his=his.split(':');; dt=new Date(ymd[0],ymd[1]-1,ymd[2],his[0],his[1],his[2]); }else{ dt=new Date(); } Y=dt.getFullYear();//年 m=dt.getMonth()+1;if(m<10)m='0'+m;//月 d=dt.getDate();if(d<10)d='0'+d;//天 w=dt.getDay();//星期 H=dt.getHours();if(H<10)H='0'+H;//小时 i=dt.getMinutes();if(i<10)i='0'+i;//分钟 s=dt.getSeconds();if(s<10)s='0'+s;//秒 W=this.weekArr[w]; return type.replace('Y',Y).replace('m',m).replace('d',d).replace('H',H).replace('i',i).replace('s',s).replace('w',w).replace('W',W); }, clearbgcolor:function(){ this.objtd.css({'backgroundColor':'','color':''}); }, setMonth:function(Y, m){ if(Y.indexOf('-')){ var a = Y.split('-'); Y = a[0]; m = a[1]; } this.addcale(Y, m); }, addcale:function(Y,m) { var me = this; me.Y=Y; me.m=m; var first = ''+Y+'-'+m+'-01', stuat = me.formdt('Y-m-w',first); stuat = stuat.split('-'); var year=parseFloat(stuat[0]), month=parseFloat(stuat[1]), maxday=me.marr[month-1];//这个月最大天数 if(year%4==0&&month==2)maxday=29;//判断是不是轮年 month=xy10(month); me.beforechangemonth(me, Y, month); var ic=parseFloat(stuat[2]); me.objtd.html('<div> </div><div> </div>'); me.objtd.attr('title',''); me.clearbgcolor(); var maic=1; var xq = 0,nic=ic-1,xqa=ic; var xqarr=[0,0,0,0,0,0,0]; //当月24节气名称 var tmp1=me.sTerm(Y,m*2-2); var tmp2=me.sTerm(Y,m*2-1); var sterma={}; sterma[''+month+''+tmp1+'']=me.solarTerm[m*2-2]; sterma[''+month+''+tmp2+'']=me.solarTerm[m*2-1]; me.dayvalue={}; me.dayobj={}; for(var i=0;i<maxday;i++){ maic=i+ic; nic++; if((maic+1)%7==0)xq++; if(maic%7==0)nic=0; xqarr[nic]++; var o = me.objtd[maic]; var sar = {d:i+1,oi:maic,week:this.weekArr[xqa]}; xqa++; if(xqa==7)xqa=0; var d = xy10(sar.d); var day = ''+year+'-'+month+'-'+d+'',nday=day; o.style.backgroundColor=(day==me.date)?me.todaycolor:'';//今天 var jrday= this.feastarr[''+month+''+d+'']; var lunar= me.lunar.iconv(Y,m,d);//农历计算 sar.lunar= lunar;//农历 //父亲节母亲节感恩节计算 var tsjrs=me.tsarr[''+month+''+xqarr[nic]+''+nic+'']; if(tsjrs)jrday=tsjrs; //24节气名称 var j24name = sterma[''+month+''+(i+1)+'']; if(j24name)jrday=j24name; sar.color='red'; if(!jrday){ if(lunar!=''){ var mts = lunar[1]+lunar[2]; var jrday = me.feastarr[mts]; if(jrday){ day+='\n'+jrday+''; sar.jieri = jrday; }else{ sar.jieri = lunar[2]; sar.color = '#aaaaaa';//没有节日的 } } }else{ day+='\n'+jrday+''; sar.jieri = jrday; } if(lunar!='')day+='\n'+lunar[0]+' '+lunar[1]+lunar[2]+''; this.addneiroshow(o, sar); me.dayobj[sar.d] = sar; me.dayvalue[maic] = sar; o.title=day; } /* var qoi = 1; for(var i=maxday+ic;i<42;i++){ var o = me.objtd[i]; o.innerHTML='<div style="color:#cccccc;line-height:26px">'+qoi+'</div><div style="line-height:20px"> </div>'; qoi++ }*/ getcmp('calenow_'+me.rand+'').setText(''+year+'年'+month+'月'); me.changemonth(me,Y, month); }, renderer:function(){ return ''; }, addneiroshow:function(o, sar){ var s= '<div style="font-size:14px;line-height:20px">'+sar.d+'</div>'; s+='<div style="font-size:11px;color:'+sar.color+';line-height:20px">'+sar.jieri+'</div>'; var s1 = this.renderer(o,sar,this.Y,xy10(this.m)); if(s1)s=s1; o.innerHTML = s; }, clickday:function(o, e) { var me = this; var oi=parseFloat($(o).attr('oi')); var d = me.dayvalue[oi]; if(!d)return; var m = me.m; var day=''+me.Y+'-'+xy10(m)+'-'+xy10(d.d)+''; this.click(day,me, e); }, click:function(){} });